package cn.tangsihai.org.service.impl;

import cn.tangsihai.basic.service.impl.BasicServiceImpl;
import cn.tangsihai.basic.util.PageList;
import cn.tangsihai.org.domain.Department;
import cn.tangsihai.org.mapper.DepartmentMapper;
import cn.tangsihai.org.query.DepartmentQuery;
import cn.tangsihai.org.service.IDepartmentService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;
@Service
@Transactional(readOnly = true, propagation = Propagation.SUPPORTS) // 事务
public class DepartmentServiceImpl extends BasicServiceImpl<Department> implements IDepartmentService {
    @Autowired
    private DepartmentMapper departmentMapper;

    @Override
    @Transactional // 事务
    public void save(Department department) {
        departmentMapper.add(department);
        /*
            添加补充：
            添加dirPath字段：
            1.如果是顶级部门：dirPath = 自己的id（要添加数据的id 自增长id）
            2.不是顶级部门：dirPath = 上级部门的dirPath + 自己的id（要添加数据的id 自增长id）
         */
        /*if (department.getParent() == null){ // 添加顶级部门
            department.setDirPath("/" + department.getId()); // 将部门信息存入dirPath字段中
        } else { // 添加次级部门
            // 根据修改的部门id获取上级部门信息从而获取对应字段的dirPath字段的值
            String pDirPath = findById(department.getParent().getId()).getDirPath();
            // 将部门信息存入dirPath字段中
            department.setDirPath(pDirPath + "/" + department.getId());
        }*/
        // 更新数据
        update(department);
    }

    @Override
    @Transactional // 事务
    public void update(Department department) {
        /*
            修改补充：
            修改dirPath字段：
            1.如果是顶级部门：dirPath = 自己的id
            2.不是顶级部门：dirPath = 上级部门的dirPath + 自己的id
         */
        if (department.getParent() == null || department.getParent().getId() == null){
            // 将部门信息存入dirPath字段中
            department.setDirPath("/" + department.getId());
        } else {
            // 根据修改的部门id获取上级部门信息从而获取对应字段的dirPath字段的值
            String pDirPath = findById(department.getParent().getId()).getDirPath();
            // 将部门信息存入dirPath字段中
            department.setDirPath(pDirPath + "/" + department.getId());
        }
        departmentMapper.update(department);
    }

    /**
     * 查询所有上级部门信息
     * @return
     */
    @Override
    public List<Department> queryTree() {
        return departmentMapper.queryTree();
    }
}
